package Servlets;

import Estructuras.Principales.PrincipalComprasDTO;
import Herramientas.Herramientas;
import Herramientas.MailMotor;
import Herramientas.RedireccionPOPUP;
import Reportes.Reportes;
import TarryDAOS.ComprasDAO;
import TarryDAOS.ImpuestosDAO;
import TarryDAOS.PartnerDAO;
import TarryDTOS.ConceptoCompraDTO;
import TarryDTOS.ImpuestosDTO;
import TarryDTOS.OrdenCompraDTO;
import TarryDTOS.PartnerDTO;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Alan Gonzalez
 */
@WebServlet(name = "Compras", urlPatterns = {"/Compras"})
public class Compras extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
// <editor-fold  desc="CABECERA CONTROLADORA DE SERVICIOS.">
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            String action = request.getParameter("action");
            HttpSession session = request.getSession();

            if (action.equals("principal")) {
                this.principal(request, response, session);
                
            } else if (action.equals("nuevaOrden")) {
                this.nuevaOrden(request, response, session);
            } else if (action.equals("nuevaOrdenRequest")) {
                this.nuevaOrdenRequest(request, response, session);
            } else if (action.equals("conceptosCompra")) {
                this.conceptosCompra(request, response, session);
            } else if (action.equals("nuevoConceptoCompra")) {
                this.nuevoConceptoCompra(request, response, session);
            } else if (action.equals("nuevoConceptoCompraRequest")) {
                this.nuevoConceptoCompraRequest(request, response, session);
            } else if (action.equals("eliminaConcepto")) {
                this.eliminaConcepto(request, response, session);
            } else if (action.equals("eliminarOrdenCompra")) {
                this.eliminarOrdenCompra(request, response, session);
            } else if (action.equals("envioOrdenCompra")) {
                this.envioOrdenCompra(request, response, session);
            } else if (action.equals("envioOrdenCompraCeroConceptos")) {
                this.envioOrdenCompraCeroConceptos(request, response, session);
            } else if (action.equals("principalOrdenFiltro")) {
                this.principalOrdenFiltro(request, response, session);
            } else if (action.equals("verReporteOrdenCompraPDF")) {
                this.verReporteOrdenCompraPDF(request, response, session);
            } else if (action.equals("reporteCompra")) {
                this.reporteCompra(request, response, session);

            } else {
                System.out.println("ERROR AL ENTRAR A UN SERVICIO DENTRO DE COMPRAS, EL SERVICIO :" + action + " NO EXISTE");
            }
        } finally {
            out.close();
        }
    }
// </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="METODOS DEL SERVLET SOPORTADOS">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    /**
     * ALAN GONZALEZ SERVICIO PRINCIPAL DE COMPRAS CARGA TODAS LAS ORDENES DE
     * COMPRA
     *
     * @param request
     * @param response
     * @param session
     */
    public void principal(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        PrincipalComprasDTO principal = new PrincipalComprasDTO();
        ComprasDAO comprasDAO = new ComprasDAO();
        principal.setOrdenesCompra(comprasDAO.ordenesCompra());
        session.setAttribute("principalCompras", principal);
        RequestDispatcher d = request.getRequestDispatcher("TarryJSP/ComprasJSP/ordenesMain.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * ALAN GONZALEZ SERVICIO PARA MOSTRAR VISTA DE NUEVA ORDEN DE COMPRA
     *
     * @param request
     * @param response
     * @param session
     */
    public void nuevaOrden(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        PrincipalComprasDTO principal = new PrincipalComprasDTO();
        Herramientas herramientas = new Herramientas();
        PartnerDAO partnerDAO = new PartnerDAO();

        principal.setPartners(partnerDAO.partnersProveedores());

        principal.setAnios(herramientas.aniosCombo());
        principal.setMeses(herramientas.mesesCombo());
        principal.setDias(herramientas.diasCombo());

        session.setAttribute("principalCompras", principal);

        RequestDispatcher d = request.getRequestDispatcher("TarryJSP/ComprasJSP/ordenCompra.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * ALAN GONZALEZ - SISTEMA
     *
     * @param request
     * @param response
     * @param session
     */
    public void nuevaOrdenRequest(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        PrincipalComprasDTO principal = new PrincipalComprasDTO();
        ComprasDAO comprasDAO = new ComprasDAO();
        PartnerDAO partnerDAO = new PartnerDAO();

        Vector errores = new Vector();
        int folio = 0;
        int banderaFolio = 0;
        int proveedor = Integer.parseInt(request.getParameter("proveedor"));

        if (request.getParameter("folio").length() > 0) {
            folio = Integer.parseInt(request.getParameter("folio"));
            banderaFolio = comprasDAO.existeFolio(folio); // controla si ya existe un folio ingresado
        } else {
            errores.add("Ingrese Folio de Compra");
            banderaFolio = 0;
        }

        if (banderaFolio > 0) {
            errores.add("Ya existe una orden de compra Con ese Folio, Favor de verificar");
        }

        if (proveedor == 0) {
            errores.add("Selecione un Proveedor de la Lista");
        }

        int diaFecha = Integer.parseInt(request.getParameter("diaFecha"));
        int mesFecha = Integer.parseInt(request.getParameter("mesFecha"));
        int anioFecha = Integer.parseInt(request.getParameter("anioFecha"));

        if (diaFecha == 0) {
            errores.add("Seleccione Un Dia Para Fecha de Entrega");
        }
        if (mesFecha == 0) {
            errores.add("Seleccione Un Mes Para Fecha de Entrega");
        }
        if (anioFecha == 0) {
            errores.add("Seleccione Un Año Para Fecha de Entrega");
        }

        String observaciones = "";
        if (request.getParameter("obs").length() > 0) {
            observaciones = request.getParameter("obs");
        } else {
            observaciones = "";
        }

        if (errores.size() > 0) {
            Herramientas herramientas = new Herramientas();

            principal.setErrores(errores);
            principal.setnErrores(errores.size());
            principal.setAnios(herramientas.aniosCombo());
            principal.setMeses(herramientas.mesesCombo());
            principal.setDias(herramientas.diasCombo());
            principal.setPartners(partnerDAO.partnersProveedores());
            session.setAttribute("principalCompras", principal);
            RequestDispatcher onError = request.getRequestDispatcher("TarryJSP/ComprasJSP/ordenCompra.jsp");
            try {
                onError.forward(request, response);
            } catch (ServletException ex) {
                Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            // REGISTRO Y REDIRECCION DE FROMULARIO CONCEPTOS //
            String fechaSQL = "" + anioFecha + "-" + mesFecha + "-" + diaFecha + "";
            comprasDAO.nuevaOrdenCompra(folio, proveedor, fechaSQL, observaciones);
            RequestDispatcher d = request.getRequestDispatcher("./Compras?action=conceptosCompra&folioOrdenCompra=" + folio);
            try {
                d.forward(request, response);
            } catch (ServletException ex) {
                Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * ALAN GONZALEZ SERVICIO CONCEPTOS COMPRA
     *
     * @param request
     * @param response
     * @param session
     */
    public void conceptosCompra(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        int folioOrdenCompra = Integer.parseInt(request.getParameter("folioOrdenCompra"));
        PrincipalComprasDTO principal = new PrincipalComprasDTO();
        ComprasDAO comprasDAO = new ComprasDAO();
        OrdenCompraDTO orden = new OrdenCompraDTO();

        orden = comprasDAO.ordenCompraPorFolio(folioOrdenCompra);
        principal.setOrdenCompra(orden);

        principal.setFolioOrdenCompraApuntador(folioOrdenCompra);
        principal.setConceptos(comprasDAO.conceptosCompra(folioOrdenCompra));
        session.setAttribute("principalCompras", principal);
        RequestDispatcher d = request.getRequestDispatcher("TarryJSP/ComprasJSP/conceptosCompra.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * ALAN GONZALEZ NUEVO CONCEPTO
     *
     * @param request
     * @param response
     * @param session
     */
    public void nuevoConceptoCompra(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        int folioOrdenCompra = Integer.parseInt(request.getParameter("folio"));
        Herramientas h = new Herramientas();
        PrincipalComprasDTO principal = new PrincipalComprasDTO();
        principal.setFolioOrdenCompraApuntador(folioOrdenCompra);
        principal.setUnidadesMedida(h.unidadesMedida());
        session.setAttribute("principalCompras", principal);
        RequestDispatcher d = request.getRequestDispatcher("TarryJSP/ComprasJSP/concepto.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * ALAN GONZALEZ SERVICIO
     *
     * @param request
     * @param response
     * @param session
     */
    public void nuevoConceptoCompraRequest(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        Herramientas h = new Herramientas();
        Vector errores = new Vector();
        int folio = Integer.parseInt(request.getParameter("folioApuntador")); // HIDDEN
        PrincipalComprasDTO principal = new PrincipalComprasDTO();
        String descripcion = new String();
        int unidadMedida = Integer.parseInt(request.getParameter("um"));
        double cantidad = 0.0;
        double precioUnitario = 0.0;

        if (request.getParameter("concepto").length() > 0) {
            descripcion = request.getParameter("concepto");
        } else {
            errores.add("INGRESE UN CONCEPTO DE COMPRA ");
        }

        if (request.getParameter("cantidad").length() > 0) {
            cantidad = Double.parseDouble(request.getParameter("cantidad"));
        } else {
            errores.add("INGRESE LA CANTIDAD DEL CONCEPTO");
        }

        if (request.getParameter("pu").length() > 0) {
            precioUnitario = Double.parseDouble(request.getParameter("pu"));
        } else {
            errores.add("INGRESE EL PRECIO UNITARIO");
        }

        if (unidadMedida == 0) {
            errores.add("SELECCIONE UNA UNIDAD DE MEDIDA");
        }

        // IVA DEL CONCEPTO
        int iva = Integer.parseInt(request.getParameter("iva"));
        if (iva == 0) {
            errores.add("ERROR SELECCIONE UNA TAZA DE IVA AL CONCEPTO");
        }

        if (errores.size() > 0) {
            principal.setUnidadesMedida(h.unidadesMedida());
            principal.setErrores(errores);
            principal.setnErrores(errores.size());
            session.setAttribute("principalCompras", principal);
            RequestDispatcher d = request.getRequestDispatcher("TarryJSP/ComprasJSP/concepto.jsp");
            try {
                d.forward(request, response);
            } catch (ServletException ex) {
                Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            // se realiza registro //
            ConceptoCompraDTO conceptoDTO = new ConceptoCompraDTO();
            ImpuestosDAO impuestosDAO = new ImpuestosDAO();
            ImpuestosDTO impuestosDTO = new ImpuestosDTO();
            impuestosDTO = impuestosDAO.configuracionImpuestos();

            conceptoDTO.setFolio(folio);
            conceptoDTO.setConcepto(descripcion);
            conceptoDTO.setCantidad(cantidad);
            conceptoDTO.setUm(unidadMedida);
            conceptoDTO.setPu(precioUnitario);
            conceptoDTO.setTotalConcepto(cantidad * precioUnitario);

            // PORCENTAJE IVA  Y MONTOS DE LA TAZA DE IVA 
            if (iva == 1) {
                conceptoDTO.setPorcentajeIva(0);
                conceptoDTO.setMontoIva(0);
            }
            if (iva == 2) {
                conceptoDTO.setPorcentajeIva(impuestosDTO.getIva());
                conceptoDTO.setMontoIva(h.calculoIva(conceptoDTO.getTotalConcepto()));
            }

            // REGISTRO DEL CONCEPTO  
            ComprasDAO comprasDAO = new ComprasDAO();
            comprasDAO.registroConcepto(conceptoDTO);
            // REGISTRO DEL CONCEPTO  

            // ## SE ACTUALIZAN TOTALES CADA INGRESO
            comprasDAO.actualizaTotalesOrdenCompra(folio);
            // ## SE ACTUALIZAN TOTALES CADA INGRESO

            // ## SE ACTUALIZAN EL NUMERO DE CONCEPTOS .DE ESTA ORDEN 
            comprasDAO.actualizaNumeroConceptosOrden(folio);
            // ## SE ACTUALIZAN EL NUMERO DE CONCEPTOS DE ESTA ORDEN 

            RedireccionPOPUP redireccion = new RedireccionPOPUP();
            redireccion.setServicio("./Compras?action=conceptosCompra");
            redireccion.setVariables("folioOrdenCompra=" + folio);
            session.setAttribute("sistema", redireccion);
            RequestDispatcher d = request.getRequestDispatcher("./loading.jsp");
            try {
                d.forward(request, response);
            } catch (ServletException ex) {
                Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /**
     * ALAN GONZALEZ SERVICIO PARA ELIMINAR CONCEPTOS DE UNA ORDEN DE COMPRA
     *
     * @param request
     * @param response
     * @param session
     */
    public void eliminaConcepto(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        int idConcepto = Integer.parseInt(request.getParameter("id"));
        int folio = Integer.parseInt(request.getParameter("folio"));
        int index = Integer.parseInt(request.getParameter("index"));

        ComprasDAO comprasDAO = new ComprasDAO();
        switch (index) {
            case 1:
                String servicioEliminaRecords = "./Compras?action=eliminaConcepto&index=2&id=" + idConcepto + "&folio=" + folio;
                session.setAttribute("tarryServiceDeleteRecord", servicioEliminaRecords);
                RequestDispatcher d = request.getRequestDispatcher("TarryJSP/popUpAvisoEliminar.jsp");
                try {
                    d.forward(request, response);
                } catch (ServletException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
            case 2:
                comprasDAO.eliminarConceptoOrdenCompra(idConcepto);
                RedireccionPOPUP redireccionPOPUP = new RedireccionPOPUP();
                redireccionPOPUP.setServicio("./Compras?action=conceptosCompra");
                redireccionPOPUP.setVariables("folioOrdenCompra=" + folio);
                session.setAttribute("sistema", redireccionPOPUP);
                RequestDispatcher f = request.getRequestDispatcher("./loading.jsp");
                try {
                    f.forward(request, response);
                } catch (ServletException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
        }
    }

    /**
     * ALAN GONZALEZ SERVICIO PARA ELIMINAR ORDEN DE COMPRA Y CONCEPTOS DE UNA
     * ORDEN DE COMPRA
     *
     * @param request
     * @param response
     * @param session
     */
    public void eliminarOrdenCompra(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        int index = Integer.parseInt(request.getParameter("index"));
        ComprasDAO comprasDAO = new ComprasDAO();
        int folio = Integer.parseInt(request.getParameter("folioOrden"));
        switch (index) {
            case 1:
                String servicioEliminaRecords = "./Compras?action=eliminarOrdenCompra&index=2&folioOrden=" + folio;
                session.setAttribute("tarryServiceDeleteRecord", servicioEliminaRecords);
                RequestDispatcher d = request.getRequestDispatcher("TarryJSP/popUpAvisoEliminar.jsp");
                try {
                    d.forward(request, response);
                } catch (ServletException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
            case 2:
                comprasDAO.eliminarOrdenCompra(folio);
                RedireccionPOPUP redireccionPOPUP = new RedireccionPOPUP();
                redireccionPOPUP.setServicio("./Compras?action=principal");
                session.setAttribute("sistema", redireccionPOPUP);
                RequestDispatcher f = request.getRequestDispatcher("./loading.jsp");
                try {
                    f.forward(request, response);
                } catch (ServletException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
        }
    }

    /**
     * ALAN GONZALEZ
     *
     * @param request
     * @param response
     * @param session
     */
    public void reporteCompra(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        int folio = Integer.parseInt(request.getParameter("folio"));
        // CORROBORAR Y ACTUALIZA LA INFORMACION   
        ComprasDAO comprasDAO = new ComprasDAO();
        comprasDAO.actualizaTotalesOrdenCompra(folio);
        Reportes reporte = new Reportes();
        reporte.OrdenCompra(folio);
    }

    /**
     * ALAN GONZALEZ | ENVIO ORDEN DE COMPRA
     *
     * @param request
     * @param response
     * @param session
     */
    public void envioOrdenCompra(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        PrincipalComprasDTO principal = new PrincipalComprasDTO();
        Vector errores = new Vector();
        MailMotor email = new MailMotor();
        Reportes reportes = new Reportes();
        Herramientas herramientas = new Herramientas();

        ComprasDAO comprasDAO = new ComprasDAO();
        OrdenCompraDTO ordenCompraDTO = new OrdenCompraDTO();

        PartnerDAO partnerDAO = new PartnerDAO();
        PartnerDTO partnerDTO = new PartnerDTO();

        int folio = Integer.parseInt(request.getParameter("folio"));
        int index = Integer.parseInt(request.getParameter("index"));

        // SE OBTIENE LA ORDEN DE COMPRA
        ordenCompraDTO = comprasDAO.ordenCompraPorFolio(folio);
        // SE OBTIENE EL PARTNER (PROVEEDOR)
        partnerDTO = partnerDAO.unPartnerPorId(ordenCompraDTO.getIdPartner());
        // SE CARGA EL PARTNER EN LA ESTRUCTURA PRINCIPAL
        principal.setPartner(partnerDTO);
        // SE CARGA EL APUNTADOR DEL FOLIO DE COMPRA
        principal.setFolioOrdenCompraApuntador(folio);

        switch (index) {
            case 1:
                errores.clear();
                principal.setErrores(errores);
                principal.setnErrores(errores.size());
                session.setAttribute("principalCompras", principal);
                RequestDispatcher f = request.getRequestDispatcher("TarryJSP/ComprasJSP/envioOrden.jsp");
                try {
                    f.forward(request, response);
                } catch (ServletException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
            case 2:
                // ATENCION ATENCION SIGUIENTE UN IF ANIDADO QUE REALIZA LA EVALUACION DE UN PATRON DE EMAIL
                String mailProveedor = new String();
                if (request.getParameter("emailProveedor").length() > 0) {
                    mailProveedor = request.getParameter("emailProveedor");

                    boolean banderaMail = new Boolean(null);
                    banderaMail = herramientas.validarEmail(mailProveedor);

                    if (banderaMail == true) {
                    } else {
                        errores.add("INGRESE UNA DIRECCION DE CORREO ELECTRONICO VALIDA DEL PROVEEDOR PARA ENVIAR LA ORDEN DE COMPRA");
                    }

                } else {
                    errores.add("EL CAMPO DEL EMAIL DE PROVEEDOR ES OBLIGATORIO ");
                }

                if (errores.size() > 0) {
                    RequestDispatcher onError = request.getRequestDispatcher("TarryJSP/ComprasJSP/envioOrden.jsp");
                    try {
                        principal.setErrores(errores);
                        principal.setnErrores(errores.size());
                        session.setAttribute("principalCompras", principal);
                        onError.forward(request, response);
                    } catch (ServletException ex) {
                        Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IOException ex) {
                        Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    // SE HACE EVALUACION DEL EMAIL DEL PARTNER
                    boolean banderaCambioEmail = herramientas.comparaDosCadenas(partnerDTO.getEmail(), mailProveedor);

                    // SI EL NUEVO EMAIL ES DIFERENTE SE REALIZA EL UPDATE 
                    if (banderaCambioEmail == false) {
                        partnerDAO.actualizaEmailPartner(partnerDTO.getId(), mailProveedor);
                    }

                    // SE PROCEDE AL ENVIO DEL REPORTE ORDEN DE COMPRA
                    String rutaReporteEmail = reportes.OrdenCompra(folio);
                    String asunto = "Dulces Tarry Orden de Compra -- No responder";
                    String mensaje = " A quien corresponda: en archivo adjunto podra encontrar La Orden de Compra con Folio:" 
                            + folio + " Por Su fina Atencion, Muchas Gracias Departamento de Compras Dulces Tarry";
                    email.enviarMailModuloCompras(mailProveedor, asunto, mensaje, rutaReporteEmail);

                    // SE REALIZA EL CAMBIO DE BANDERA DE ESTADO DE ENVIADO PARA EVITAR QUE SE MODIFIQUE LA ORDEN COMPRA (CONCEPTOS)
                    comprasDAO.banderaOrdenEnvio(folio);
                }
                break;
        }
    }

    /**
     * ALAN GONZALEZ MUESTRA EN JSP UN MENSAJE DE ERROR AL QUERER ENVIAR UNA
     * ORDEN EN BLANCO
     *
     * @param request
     * @param response
     * @param session
     */
    public void envioOrdenCompraCeroConceptos(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        RequestDispatcher f = request.getRequestDispatcher("TarryJSP/ComprasJSP/error.jsp");
        try {
            f.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * ALAN GONZALEZ SERVICIO QUE FILTRA LAS ORDENES POR FOLIO
     *
     * @param request
     * @param response
     * @param session
     */
    public void principalOrdenFiltro(HttpServletRequest request, HttpServletResponse response, HttpSession session) {

        ComprasDAO comprasDAO = new ComprasDAO();
        int folioFiltro = 0;
        if (request.getParameter("folio").length() > 0) {
            folioFiltro = Integer.parseInt(request.getParameter("folio"));
        } else {
            folioFiltro = 0;
        }

        PrincipalComprasDTO principal = new PrincipalComprasDTO();

        if (folioFiltro > 0) {
            principal.setOrdenesCompra(comprasDAO.ordenesCompraFolio(folioFiltro));
        } else {
            principal.setOrdenesCompra(comprasDAO.ordenesCompra());
        }

        session.setAttribute("principalCompras", principal);
        RequestDispatcher d = request.getRequestDispatcher("TarryJSP/ComprasJSP/ordenesMain.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * ALAN GONZALEZ REDIRECCION AL PDF
     *
     * @param request
     * @param response
     * @param session
     */
    public void verReporteOrdenCompraPDF(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        int folio = Integer.parseInt(request.getParameter("folio"));
        ComprasDAO comprasDAO = new ComprasDAO();
        comprasDAO.actualizaTotalesOrdenCompra(folio);
        Reportes reporte = new Reportes();
        reporte.OrdenCompra(folio);
        Herramientas h = new Herramientas();
        String ftpUrlOrdenCompra = "ftp://192.168.1.200" + "/" + "OrdenCompra_" + folio + ".pdf";  // LO DEJO COMO CONSTANTE DEL SERVIDOR 
        session.setAttribute("ftpUrlArchivo", ftpUrlOrdenCompra);
        RequestDispatcher d = request.getRequestDispatcher("TarryJSP/ComprasJSP/ordenCompraPDF.jsp");
        try {
            d.forward(request, response);
        } catch (ServletException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Compras.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
